1

在 MySQL 中,下表中的字显式被保留。其中大多数字进制被标准 SQL 用作列名 和/或 表名( 例如,GROUP) 。少数被保留了,因为 MySQL 需要它们,( 目前) 使用 yacc 解析程序。保留字被引起来后可以用作识别符。

你不小心使用了下面的关键字,那么就会报这个错误:

SQL Error: 1064, SQLState: 42000

MySQL 关键字和保留字

下面这个表格的目前 MySQL 所拥有的关键字和保留字,在使用 MySQL 创建库名、表名、字段名等的时候,最好避免直接使用这些单词,并且不分大小写,否则的话很容易报错。

1 2 3
ADD ALL ALTER
ANALYZE AND AS
ASC ASENSITIVE BEFORE
BETWEEN BIGINT BINARY
BLOB BOTH BY
CALL CASCADE CASE
CHANGE CHAR CHARACTER
CHECK COLLATE COLUMN
CONDITION CONNECTION CONSTRAINT
CONTINUE CONVERT CREATE
CROSS CURRENT_DATE CURRENT_TIME
CURRENT_TIMESTAMP CURRENT_USER CURSOR
DATABASE DATABASES DAY_HOUR
DAY_MICROSECOND DAY_MINUTE DAY_SECOND
DEC DECIMAL DECLARE
DEFAULT DELAYED DELETE
DESC DESCRIBE DETERMINISTIC
DISTINCT DISTINCTROW DIV
DOUBLE DROP DUAL
EACH ELSE ELSEIF
ENCLOSED ESCAPED EXISTS
EXIT EXPLAIN FALSE
FETCH FLOAT FLOAT4
FLOAT8 FOR FORCE
FOREIGN FROM FULLTEXT
GOTO GRANT GROUP
HAVING HIGH_PRIORITY HOUR_MICROSECOND
HOUR_MINUTE HOUR_SECOND IF
IGNORE IN INDEX
INFILE INNER INOUT
INSENSITIVE INSERT INT
INT1 INT2 INT3
INT4 INT8 INTEGER
INTERVAL INTO IS
ITERATE JOIN KEY
KEYS KILL LABEL
LEADING LEAVE LEFT
LIKE LIMIT LINEAR
LINES LOAD LOCALTIME
LOCALTIMESTAMP LOCK LONG
LONGBLOB LONGTEXT LOOP
LOW_PRIORITY MATCH MEDIUMBLOB
MEDIUMINT MEDIUMTEXT MIDDLEINT
MINUTE_MICROSECOND MINUTE_SECOND MOD
MODIFIES NATURAL NOT
NO_WRITE_TO_BINLOG NULL NUMERIC
ON OPTIMIZE OPTION
OPTIONALLY OR ORDER
OUT OUTER OUTFILE
PRECISION PRIMARY PROCEDURE
PURGE RAID0 RANGE
READ READS REAL
REFERENCES REGEXP RELEASE
RENAME REPEAT REPLACE
REQUIRE RESTRICT RETURN
REVOKE RIGHT RLIKE
SCHEMA SCHEMAS SECOND_MICROSECOND
SELECT SENSITIVE SEPARATOR
SET SHOW SMALLINT
SPATIAL SPECIFIC SQL
SQLEXCEPTION SQLSTATE SQLWARNING
SQL_BIG_RESULT SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT
SSL STARTING STRAIGHT_JOIN
TABLE TERMINATED THEN
TINYBLOB TINYINT TINYTEXT
TO TRAILING TRIGGER
TRUE UNDO UNION
UNIQUE UNLOCK UNSIGNED
UPDATE USAGE USE
USING UTC_DATE UTC_TIME
UTC_TIMESTAMP VALUES VARBINARY
VARCHAR VARCHARACTER VARYING
WHEN WHERE WHILE
WITH WRITE X509
XOR YEAR_MONTH ZEROFILL

解决方法

有时候由于特殊原因,又必须使用这些关键字当作名称怎么办?办法还是有的,这里推荐三种方式来解决这个问题。

一、将表名或字段名用方括号([])括起来

xml 配置:

<property name="desc" type="string">
    <column name="[DESC]" length="255" not-null="true"/>
</property>

注解:

@Column(name = "[DESC]", nullable = false)
public String getDesc() {
    return this.desc;
}

二、将表名或字段名用两个重音符号(`)括起来

重音符号键即是键盘上 “1” 键左边的、“Tab” 键上边的那个键。此符号亦被称为“反向引号”。

xml 配置:

<property name="desc" type="string">
    <column name="`DESC`" length="255" not-null="true"/>
</property>

注解:

@Column(name = "`DESC`", nullable = false)
public String getDesc() {
    return this.desc;
}

三、将表名或字段名用双引号(")括起来

xml 配置:

<property name="desc" type="string">
    <column name='"DESC"' length="255" not-null="true"/>
</property>

注解:

@Column(name = "\"DESC\"", nullable = false)
public String getDesc() {
    return this.desc;
}

谦谦君子
110 声望2 粉丝